package algorithms.sort.n2;

import algorithms.sort.SortingVisualization;

/**
 * 插入排序
 */
public class InsertionSort extends SortingVisualization {
    /**
     * 初始化窗口大小并
     *
     * @param array
     */
    public InsertionSort(int[] array) {
        super(array);
    }

    @Override
    public void showSortingProcess() {
        // 遍历元素
        for (int i = 0; i < array.length; i++) {
            //向前寻找插入位置
            for (int j = 0; j < i; j++) {
                //如果前面存在大于当前元素时，插入该元素（从尾部交换至j）
                if (array[i] < array[j]) {
                    int tempIndex = i;
                    while (tempIndex > j) {
                        int temp = array[tempIndex];
                        array[tempIndex] = array[tempIndex-1];
                        --tempIndex;
                        array[tempIndex] = temp;
                        sortPanelRepaint();
                    }
                }
            }
        }
    }
}
